package controller;

import java.io.IOException;

import model.AangebodenCursus;
import model.Cursist;
import model.HerscholingCursist;
import model.Inschrijving;
import model.VrijeCursist;
import model.container.AangebodenCursussen;
import model.container.Cursisten;
import model.container.CursistenException;
import model.container.Inschrijvingen;
import model.container.InschrijvingenException;
import utils.Datum;

public class InschrijvingController {
	Cursisten cursistenAanbod;
	AangebodenCursussen cursusAanbodGepland;
	Inschrijvingen inschrijvingen;
	Cursist huidigeCursist;

	public InschrijvingController(Cursisten cursisten, AangebodenCursussen aangebodenCursussen,
			Inschrijvingen inschrijvingen) {
		this.cursistenAanbod = cursisten;
		this.cursusAanbodGepland = aangebodenCursussen;
		this.inschrijvingen = inschrijvingen;
		huidigeCursist = null;
	}

	// [start] Componenten voor Login Tab
	public String[] getCursistenLijst() {
		return cursistenAanbod.getCursisten();
	}

	// [end]

	// [start] Personalia Tab
	public boolean isVrijeCursist() {
		boolean testValue = false;
		if (!(huidigeCursist == null)) {
			testValue = (huidigeCursist instanceof VrijeCursist);
		}
		return testValue;
	}

	public boolean isHerscholingsCursist() {
		boolean testValue = false;
		if (!(huidigeCursist == null)) {
			testValue = (huidigeCursist instanceof HerscholingCursist);
		}
		return testValue;
	}

	public int getCursistNummer() {
		int cursistNummer = -1;
		if (!(huidigeCursist == null)) {
			cursistNummer = huidigeCursist.getID();
		} else {
			cursistNummer = cursistenAanbod.getHoogsteID();
			cursistNummer += 1;
		}
		return cursistNummer;
	}

	public String getCursistNaam() {
		String tempNaam = "";
		if (!(huidigeCursist == null)) {
			tempNaam = huidigeCursist.getNaam();
		}
		return tempNaam;
	}

	public String getVar1() {
		String temp = null;
		if (huidigeCursist instanceof VrijeCursist) {
			temp = ((VrijeCursist) huidigeCursist).getNationaliteit();
		} else if (huidigeCursist instanceof HerscholingCursist) {
			temp = ((HerscholingCursist) huidigeCursist).getHoogsteDiploma();
		}
		return temp;
	}

	public String getVar2() {
		String temp = null;
		if (huidigeCursist instanceof HerscholingCursist) {
			temp = ((HerscholingCursist) huidigeCursist).getRedenHerscholing();
		}
		return temp;
	}

	public void RegistreerCursist(int nummer, String naam, String nationaliteit) throws CloneNotSupportedException,
			CursistenException {
		if (!(huidigeCursist == null)) {
			try {
				cursistenAanbod.remove(huidigeCursist);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		huidigeCursist = new VrijeCursist(nummer, naam, nationaliteit);
		cursistenAanbod.add(huidigeCursist);
	}

	public void RegistreerCursist(int nummer, String naam, String hoogsteDiploma, String redenHerscholing)
			throws CloneNotSupportedException, CursistenException {
		if (!(huidigeCursist == null)) {
			try {
				cursistenAanbod.remove(huidigeCursist);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		huidigeCursist = new HerscholingCursist(nummer, naam, hoogsteDiploma, redenHerscholing);
		cursistenAanbod.add(huidigeCursist);
	}

	// [end]

	// [start] Componenten Cursuskeuze
	public String[] getBeschikbareCursussenLijst() {
		return cursusAanbodGepland.getCursussen();
	}

	public String[] getIngeschrevenCursussenLijst() {
		return inschrijvingen.getInschrijvingenByCursist(huidigeCursist);
	}

	public void RegistreerInschrijving(int acID) {

		try {
			int inschrID = inschrijvingen.getHoogsteID() + 1;
			Datum inschrDatum = new Datum();
			AangebodenCursus inschrCursus = cursusAanbodGepland.getAangebCursusByID(acID);
			Inschrijving newInschr = new Inschrijving(inschrID, huidigeCursist, inschrCursus, inschrDatum);
			inschrijvingen.add(newInschr);
			inschrCursus.setAantalPlaatsen(inschrCursus.getAantalPlaatsen() - 1);
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InschrijvingenException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void VerwijderInschrijving(int inschrID) {
		try {
			Inschrijving tempInschrijving = inschrijvingen.getInschrijvingByID(inschrID);
			AangebodenCursus inschrCursus = tempInschrijving.getAangebodencursus();
			inschrijvingen.remove(tempInschrijving);
			inschrCursus.setAantalPlaatsen(inschrCursus.getAantalPlaatsen() + 1);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// [end]

	// [start] Algemene componenten
	// Laden van cursist
	public void ladenVanCursist(int n) {
		huidigeCursist = cursistenAanbod.getCursistByCode(n);
	}
	// [end]
}
